package com.dianrong.common.uniauth.cas.helper.thread;

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

/**
 * . 单例模式的单线程的线程池 只服务于cas cfg的缓存更新操作
 * 
 * @author wanglin
 */
public final class SingleScheduledThreadPool {
    /**
     * . 饿汉模式单例
     */
    public final static SingleScheduledThreadPool instance = new SingleScheduledThreadPool();

    /**
     * . java提供的线程池
     */
    private final ScheduledExecutorService scheduler;

    /**
     * . 私有构造函数
     */
    private SingleScheduledThreadPool() {
        scheduler = Executors.newSingleThreadScheduledExecutor();
    }

    /**
     * . 加载一个定期执行的任务
     * 
     * @param runnable 任务执行的runnable
     * @param delayMilles 延迟执行
     * @param periodMilles 任务执行的周期
     */
    public void loadScheduledTask(Runnable runnable, long delayMilles, long periodMilles) {
        scheduler.scheduleAtFixedRate(runnable, delayMilles, periodMilles, TimeUnit.MILLISECONDS);
    }

    /**
     * . 停止接受任务
     */
    public void shutDown() {
        this.scheduler.shutdown();
    }

    /**
     * . 尝试停止线程的执行
     */
    public void shutDownNow() {
        this.scheduler.shutdownNow();
    }
}
